home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / iutil / ins_mbtree.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-01-16  |  1.1 KB  |  56 lines

  1. # include    <ingres.h>
  2. # include    <access.h>
  3. # include    <catalog.h>
  4. # include    <btree.h>
  5.  
  6. insert_mbtree(d, btree, lid, tid, tidpos)
  7. register DESC *d;
  8. char *btree;
  9. long lid[];
  10. long *tid;
  11. TID *tidpos;
  12. {
  13.     register int     i, j;
  14.     long        page;
  15.     long        l;
  16.     long        last_lid();
  17.     struct locator    tidloc;
  18.     long        ntid;
  19.     long        t;
  20.     struct BTreeNode    junk;
  21.  
  22.     page = RT;
  23.     for (i = 0; i < d->reldum.reldim - 1; ++i)
  24.     {
  25.         if (lid[i] && lid[i+1])
  26.         {
  27.             if ((t = get_tid(page, lid[i], &tidloc)) < -1)
  28.                 return(-1);
  29.             if (t != -1)
  30.                 page = t;
  31.         }
  32.         if (!lid[i] || t == -1 || !lid[i+1])
  33.         {
  34.             for (j = i; j < d->reldum.reldim - 1; ++j)
  35.             {
  36.                 if (j != i)
  37.                     lid[j] = 1;
  38.                 else if (t == -1 || !lid[i])
  39.                     lid[j] = last_lid(page);
  40.                 insert_btree(btree, page, lid[j], &ntid, tidpos, j + 2);
  41.                 page = ntid;
  42.             }
  43.             lid[d->reldum.reldim - 1] = 1;
  44.             break;
  45.         }
  46.     }
  47.     l = last_lid(page);
  48.     if (lid[d->reldum.reldim - 1] < 0 || lid[d->reldum.reldim - 1] >  l)
  49.         return(-1);
  50.     if (!lid[d->reldum.reldim - 1])
  51.         lid[d->reldum.reldim - 1] = l;
  52.     insert_btree(btree, page, lid[d->reldum.reldim - 1], tid, tidpos, 0);
  53.  
  54.     return (0);
  55. }
  56.